package model;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class EventoDAO {
	public void incluir(Evento evento) {
		// incluir evento
	}

	public void alterar(Evento evento) throws SQLException {
		Statement comando = DBConnection.getInstancia().conn.createStatement();
		String query = "UPDATE evento SET primeira_expiracao = '";
		query += evento.getPrimeiraExpiracao() + "' ";
		query += "WHERE id_evento = ";
		query += Integer.toString(evento.getId());
		comando.executeUpdate(query);
	}

	public void excluir(Evento evento) {
		// excluir evento
	}

	public ArrayList<Evento> consultar(Evento evento) throws SQLException {
		Statement comando = DBConnection.getInstancia().conn.createStatement();
		ArrayList<Evento> retorno = new ArrayList<Evento>();
		ResultSet rs;
		try {
			String query = "";
			query += "select e.id_evento,";
			query +=        "e.vencimento,";
			query +=        "e.verificacao,";
			query +=        "e.primeira_expiracao,";
			query +=        "e.segunda_expiracao,";
			query +=        "b.id_bem,";
			query +=        "b.descricao,";
			query +=        "c.matricula,";
			query +=        "c.numero,";
			query +=        "p.cnpj ";
			query += "from evento e ";
			query +=      "inner join bem b on e.bem = b.id_bem ";
			query +=      "inner join contrato c on e.contrato = c.numero ";
			query +=      "inner join projeto p on c.referencia = p.referencia ";
			query +=      "left join cliente cli on p.cnpj = cli.cnpj ";
			query +=      "and cli.notificar = 'Sim'";
			query += "where 1=1 ";
			if (evento == null)
				query += "and verificacao is null";
			else
				if (evento.getId() != 0)
					query += " and id_evento = " + Integer.toString(evento.getId());
			rs = comando.executeQuery(query);
			while (rs.next()) {
				Evento e = new Evento();
				e.setId(rs.getInt("id_evento"));
				e.setVencimento(rs.getString("vencimento"));
				e.setVerificado(rs.getString("verificacao"));
				e.setPrimeiraExpiracao(rs.getString("primeira_expiracao"));
				e.setSegundaExpiracao(rs.getString("segunda_expiracao"));
				e.setGarantia(new Garantia(new Contrato(rs.getInt("numero"),new Funcionario(rs.getInt("matricula"))),new Bem(rs.getInt("id_bem"),rs.getString("descricao"))));
				retorno.add(e);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return retorno;
	}
	
	public ArrayList<Evento> consultar(Evento evento,Contrato contrato) throws SQLException {
		Statement comando = DBConnection.getInstancia().conn.createStatement();
		// Popular evento de exemplo - quando houver integridade referencial
		//comando.executeUpdate("insert into evento values(33,'2013-05-10',null,'Seguro',566278400,12,null,null)");
		// Buscar o evento de exemplo inserido anteriormente
		ArrayList<Evento> retorno = new ArrayList<Evento>();
		ResultSet rs;
		try {
			String query = "SELECT * FROM evento e INNER JOIN bem b ON e.bem = b.id_bem WHERE 1=1";
			query += " AND contrato = " + contrato.getNumero();
			rs = comando.executeQuery(query);
			while (rs.next()) {
				Evento e = new Evento();
				e.setId(rs.getInt("id_evento"));
				e.setVencimento(rs.getString("vencimento"));
				e.setVerificado(rs.getString("verificacao"));
				e.setPrimeiraExpiracao(rs.getString("primeira_expiracao"));
				e.setSegundaExpiracao(rs.getString("segunda_expiracao"));
				e.setGarantia(new Garantia(null,new Bem(rs.getInt("bem"),rs.getString("descricao"))));
				retorno.add(e);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return retorno;
	}

}
